﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MensErgerJeNiet.Includes;
using MensErgerJeNiet.Model.Vakjes;

namespace MensErgerJeNiet.Model
{
    class SpelerLijst
    {
        private int currentSpeler = 0; //int om de huidige speler aan te geven
        public Speler[] Spelers;
        public int Length { private set; get; }
        public Speler _CurrentSpeler;
        public Speler CurrentSpeler
        {
            get { return Spelers[currentSpeler]; } //berekent en returnt de huidige speler als Speler object
            
        }

        public EindVakje[] EindVakjesCurrentSpeler {
            get { return CurrentSpeler.eindVakjes;  }
            set { CurrentSpeler.eindVakjes = value; }
        }

        public SpelerLijst(int aantalSpelers)
        {
            Spelers = new Speler[aantalSpelers];
            Length = 0;

            //voegt de spelers toe
            for (int i = 0; i < aantalSpelers; i++)
            {
                Speler tmpSpeler = new Speler();
                tmpSpeler.Kleur = MainUtil.GetRandomKleur();
                AddSpeler(tmpSpeler);
            }
            currentSpeler = 0; //stelt de huidige speler in, maakt niet uit wie het is, er moet nog gedobbeld worden voor de beginner
        }

        /// <summary>
        /// Gaat naar de volgende speler in, zodat deze via CurrentSpeler opgehaald kan worden
        /// </summary>
        public void Next()
        {
            if (currentSpeler+1 < Spelers.Length)
                currentSpeler++;
            else
                currentSpeler = 0;
        }

        /// <summary>
        /// Voegt een speler toe aan de spelerlijst, als het mogenlijk is. Afhangkelijk aan het aantal opgegevens spelers, in de constructor.
        /// </summary>
        /// <param name="speler">Nieuwe speler die toegevoegd moet worden</param>
        /// <returns>Bool of het gelukt is op niet</returns>
        public bool AddSpeler(Speler speler)
        {
            int waarSpelerInTeVoegen = -1;
            int counter = 0;
            while (waarSpelerInTeVoegen==-1 && counter < Spelers.Length) //kijkt waar nog een speler plek vrij is in de array
            {
                if (Spelers[counter] == null)
                    waarSpelerInTeVoegen = counter;
                counter++;
            }
                
            

            if (waarSpelerInTeVoegen == -1) //alle spelers zijn al bezet
                return false;

            Spelers[waarSpelerInTeVoegen] = speler;
            Spelers[waarSpelerInTeVoegen].Naam = "Speler " + (waarSpelerInTeVoegen+1);
            int pionCounter = 1;
            foreach (Pion pion in Spelers[waarSpelerInTeVoegen].PionnenLijst)
            {
                pion.ID = "SP" + (waarSpelerInTeVoegen + 1) + "Pion" + pionCounter;
                pionCounter++;
            }
            Length++; //een spelertje meer
            return true;
        }

        /// <summary>
        /// Stelt het begin vakje (vakje A) van een speler in
        /// </summary>
        /// <param name="spelerIndex"></param>
        /// <param name="beginSpeelVeldVakje"></param>
        /// <returns></returns>
        public bool SetSpelerBeginSpeelVeldVakje(int spelerIndex, BeginSpeelVeldVakje beginSpeelVeldVakje)
        {
            if (Spelers[spelerIndex] != null)
            {
                Spelers[spelerIndex].beginSpeelVeldVakje = beginSpeelVeldVakje; //zet het beginvakje in de speler
                beginSpeelVeldVakje.VanSpeler = Spelers[spelerIndex]; //maakt de speler eigenaar van het beginvakje
                return true;
            }
            return false;
        }

        /// <summary>
        /// geeft de lengte van de array Spelers terug, dus het totaal bedoelde in te stellen aantal spelers.
        /// </summary>
        /// <returns></returns>
        public int AantalSpelers()
        {
            return Spelers.Length;
        }

        public string AllSpelersEindVakjesToString()
        {
            string totString = "";
            foreach (Speler speler in Spelers)
            {
                totString += (speler.EindVakjesToString());
            }
            return totString;
        }

        public string AllSpelersBeginVakjesToString()
        {
            string totString = "";
            foreach (Speler speler in Spelers)
            {
                totString += (speler.BeginVakjesToString());
            }
            return totString;
        }
    }
}
